package com.bolehui.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.bolehui.base.result.Result;
import com.bolehui.domain.po.JobPO;
import com.bolehui.domain.vo.JobVO;

/**
 * @author chendongjie     email:chendongjie@gz.iscas.ac.cn
 * @version 1.0
 * @ClassName JobService
 * @Description
 * @createTime 2024/12/11 14:35
 * Copyright (C) 2021-2022 CASEEDER, All Rights Reserved.
 * 注意：本内容仅限于内部传阅，禁止外泄以及用于其他的商业目的
 */
public interface JobService extends IService<JobPO> {

    /**
     * 发布职位。
     *
     * @param id 职位ID
     * @return 操作结果，包含成功或失败信息
     * @throws Exception 如果发布过程中发生异常
     */
    Result postJob(Long id) throws Exception;

    /**
     * 获取所有职位列表。
     *
     * @return 操作结果，包含职位列表或失败信息
     */
    Result listJobs(Integer pageNum, Integer pageSize);

    /**
     * 编辑职位信息。
     *
     * @param jobVO 职位信息值对象
     * @return 操作结果，包含成功或失败信息
     */
    Result editJob(JobVO jobVO);

    /**
     * 保存职位信息。
     *
     * @param job 职位信息值对象
     * @param userId 用户ID
     * @return 操作结果，包含成功或失败信息
     */
    Result save(JobVO job, Long userId);

    /**
     * 分页查询职位信息。
     *
     * @param userId 用户ID
     * @param pageNum 当前页码
     * @param pageSize 每页大小
     * @return 操作结果，包含分页职位列表或失败信息
     */
    Result getJobWithPage(Long userId, Integer pageNum, Integer pageSize);

    /**
     * 根据ID获取职位详细信息。
     *
     * @param id 职位ID
     * @return 操作结果，包含职位详细信息或失败信息
     */
    Result getJobById(Long id);

    Result getJobByUserId(Long userId);

    Result getJobStatsLastSixMonths();

    Result searchJobsWithQuery(JobVO jobVO, Integer pageNum, Integer pageSize);

}
